package com.wx.lambda;

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * lambda 的演进
 * @author wangxun
 * @version 1.0
 * @description: lambda 的演进
 * @date 2020/11/25 2:45 下午
 */
public class LambdaEvolution {

    /**
     * 无参数1.8之前的
     */
    public void noArgsBefore(){
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("我是匿名内部类");
            }
        });
        thread.start();
    }

    /**
     * 无参数1.8使用lambda表达式
     */
    public void noArgs(){
        Thread thread = new Thread(
                () -> System.out.println("我是lambda表达式")
        );
        thread.start();

    }

    /**
     * 有参数的
     * 通过自定义比较器 --> 根据长度进行排序
     * @param token 比较的字符串数组
     */
    public void hasArgsBefore(String[] token){
        List<String> list = Arrays.asList(token);
        Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String s1, String s2) {
                if(s1 == null){
                    return -1;
                }
                if(s2 == null){
                    return 1;
                }
                return s1.length() - s2.length();
            }
        });
        list.stream().forEach(System.out::println);
    }

    /**
     * 有参数的 lambda
     * 通过自定义比较器 --> 根据长度进行排序
     * @param token 比较的字符串数组
     */
    public void hasArgs(String[] token){
        List<String> list = Arrays.asList(token);
        Collections.sort(list,(s1,s2)->{
            if(s1 == null){
                return -1;
            }
            if(s2 == null){
                return 1;
            }
            return s1.length() - s2.length();
        });
        list.stream().forEach(System.out::println);
    }

}
